import java.io.*;
import java.net.*;
import java.util.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.StringReader;

public class Servidor
{
	static LinkedList<Partida> partidas;
	static LinkedList<Jugador> jugadores;

	Servidor()
	{
		this.partidas = new LinkedList<Partida>();
		this.jugadores = new LinkedList<Jugador>();
	}

	void agregarJugador(Jugador jugador)
	{
		this.jugadores.add(jugador);
	}

	boolean jugadorExiste(String nombre)
	{
		Jugador jugadorActual = null;
		ListIterator<Jugador> listIteratorJugador = this.jugadores.listIterator();
		while (listIteratorJugador.hasNext())
		{
			jugadorActual = listIteratorJugador.next();
			if (jugadorActual.nombre.compareTo(nombre) == 0)
			{
				return true;
			}
		}

		return false;
	}

	void removerJugador(String nombre)
	{
		Jugador jugadorActual = null;
		ListIterator<Jugador> IteradorJugador = this.jugadores.listIterator();
		while (IteradorJugador.hasNext())
		{
			jugadorActual = IteradorJugador.next();
			if (jugadorActual.nombre.compareTo(nombre) == 0)
			{
				IteradorJugador.remove();
				return;
			}
		}
	}

	void enviarMensaje(String mensaje)
	{
		Jugador jugadorActual = null;
		Socket socket = null;
		ListIterator<Jugador> IteradorJugador = this.jugadores.listIterator();
		while (IteradorJugador.hasNext())
		{
			jugadorActual = IteradorJugador.next();
			socket = jugadorActual.getSocket();
			try
			{
				PrintWriter salida = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
				salida.println(mensaje);
			}
			catch (Exception e)
			{
				e.printStackTrace();
			}
		}
	}

	boolean crearPartida(String nombre)
	{
		Partida partidaActual = null;
		ListIterator<Partida> IteradorPartida = this.partidas.listIterator();
		while (IteradorPartida.hasNext())
		{
			partidaActual = IteradorPartida.next();
			if (partidaActual.nombre.compareTo(nombre) == 0)
			{
				return false;
			}
		}
		partidas.add(new Partida(nombre));
		return true;
	}

	boolean agregarJugadorAPartida(String nombreJugador, String nombrePartida)
	{
		Partida partidaActual = null;
		ListIterator<Partida> IteradorPartida = this.partidas.listIterator();
		while (IteradorPartida.hasNext())
		{
			partidaActual = IteradorPartida.next();
			if (partidaActual.nombre.compareTo(nombrePartida) == 0)
			{
				Jugador jugadorActual = null;
				ListIterator<Jugador> IteradorJugador = this.jugadores.listIterator();
				while (IteradorJugador.hasNext())
				{
					jugadorActual = IteradorJugador.next();
					if (jugadorActual.nombre.compareTo(nombreJugador) == 0)
					{
						partidaActual.jugadores.add(jugadorActual);
						IteradorJugador.remove();
						jugadorActual.setNave(new Nave(0, 374, 274));
						jugadorActual.setPartida(partidaActual);
						return true;
					}
				}
			}
		}
		return false;
	}
}